﻿Public Class FrmEntradaProductos

    Dim notas As New Class_RC_Controller.rc_Notas
    Dim controller As New Class_RC_Controller.rc_Movimientos

    Private _codNota As Integer = 0

    Public Property codNota() As Integer
        Get
            Return _codNota
        End Get
        Set(value As Integer)
            _codNota = value
        End Set
    End Property

    Private _codMovimiento As Integer = 0

    Public Property codMovimiento() As Integer
        Get
            Return _codMovimiento
        End Get
        Set(value As Integer)
            _codMovimiento = value
            txtNroMovimiento.Text = value
        End Set
    End Property

    Private Sub llenarDepositos()

        Dim ds As DataTable
        ds = controller.get_Depositos_All(oiml.dbConn)
        With Me.cboDeposito
            .DataSource = ds
            .DisplayMember = "descripcionDep"
            .ValueMember = "codDeposito"
        End With

        llenarSecciones()

    End Sub

    Private Sub llenarSecciones()
        If IsNumeric(cboDeposito.SelectedValue) Then
            If cboDeposito.SelectedValue > 0 Then
                Dim ds As DataTable
                ds = controller.get_SeccionesDepositos_All(oiml.dbConn, cboDeposito.SelectedValue)
                If Not ds Is Nothing Then

                    With Me.cboSeccion
                        .DataSource = ds
                        .DisplayMember = "descripcionSeccion"
                        .ValueMember = "codSeccion"
                    End With

                Else
                    cboSeccion.DataSource = Nothing

                End If
            End If

        End If
        'If IsNumeric(cboDeposito.SelectedValue) Then
        '    If cboDeposito.SelectedValue > 0 Then
        '        Dim ds As DataTable
        '        ds = controller.get_SeccionesDepositos_All(oiml.dbConn, cboDeposito.SelectedValue)
        '        With Me.cboSeccion
        '            .DataSource = ds
        '            .DisplayMember = "decripcionSeccion"
        '            .ValueMember = "codSeccion"
        '        End With
        '    End If
        'End If
    End Sub

    Private Sub FrmEntradaProductos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dgPedidoDetalle.AutoGenerateColumns = False
        dgMovDetalle.AutoGenerateColumns = False

        llenarDepositos()
        llenarSecciones()
        txtNroPedido.Focus()

        CargarMovimiento()

    End Sub

    Private Sub CargarMovimiento()
        Try
            If codMovimiento > 0 Then

                Dim ds As New DataTable
                ds = controller.get_Movimientos_ByID(oiml.dbConn, codMovimiento)

                If Not ds Is Nothing Then

                    ' cargar los controles del formulario con los valores de los campos del registro
                    codNota = ds.Rows(0)("codNota").ToString
                    CargarNota()

                    cboDeposito.SelectedValue = ds.Rows(0)("codDeposito").ToString
                    cboSeccion.SelectedValue = ds.Rows(0)("codSeccion").ToString
                    dtpFechaMov.Value = DateTime.Parse(ds.Rows(0)("fechaMov").ToString)

                    Me.lblUsuario.Text = ds.Rows(0)("usuario").ToString
                    Me.lblfechaActualizacion.Text = ds.Rows(0)("fechaActualizacion_").ToString

                    CargarDetalles()

                    btnMovConfirma.Enabled = False
                    btnBuscarPedido.Enabled = False
                    btnCancelarPedido.Enabled = False
                    txtNroPedido.ReadOnly = True
                    cboDeposito.Enabled = False
                    cboSeccion.Enabled = False
                    dtpFechaMov.Enabled = False

                End If

            Else

                ' cargar los controles del formulario con los valores de los campos del registro
                codNota = 0
                lblUsuario.Text = oiml.Usuario
                lblfechaActualizacion.Text = Date.Now.ToShortDateString
                txtNroPedido.Focus()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub btnBuscarPedido_Click(sender As System.Object, e As System.EventArgs) Handles btnBuscarPedido.Click
        Dim frmBuscador As New BuscPedido
        frmBuscador.pNroNota = txtNroPedido.Text

        'If cbxEstado.Checked Then
        '    frmBuscador.pEstado = cboEstado.Text
        'End If

        frmBuscador.ShowDialog()
        codNota = frmBuscador.pCodNota
        CargarNota()

    End Sub

    Private Sub btnMovConfirma_Click(sender As System.Object, e As System.EventArgs) Handles btnMovConfirma.Click
        Try
            Dim dt As New DataTable
            dt = notas.get_Notas_ByNRO(oiml.dbConn, txtNroPedido.Text, oiml.codEstadoCierreNota, False)

            If Not dt Is Nothing And dt.Rows.Count > 0 Then
                codNota = dt.Rows(0)("codNota").ToString

                Dim dtDetalle As New DataTable
                dtDetalle = notas.get_Notas_Detalles_All(oiml.dbConn, codNota, True, True, True)
                If Not dt Is Nothing And dt.Rows.Count > 0 Then

                    If MessageBox.Show("Desea ingresar el pedido nro. " & txtNroPedido.Text & "?", "Pedidos", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                        'If codMovimiento = 0 Then
                        codMovimiento = controller.Insert_Movimiento(oiml.dbConn, codNota, 0, dtpFechaMov.Value, cboSeccion.SelectedValue, "ENTRADA", oiml.idUsuario, oiml.idUsuario)
                        'End If

                        Dim codProducto As Integer
                        Dim cantidad As Integer

                        For i As Integer = 0 To dtDetalle.Rows.Count - 1

                            codProducto = dtDetalle.Rows(i)("codProducto")
                            cantidad = dtDetalle.Rows(i)("cantidad")

                            If Not controller.Insert_Movimientos_Detalle(oiml.dbConn, codMovimiento, codProducto, cantidad, "ENTRADA", cboSeccion.SelectedValue, cboDeposito.SelectedValue) Then
                                MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                                Exit Sub
                            End If

                        Next

                        CargarDetalles()
                        MessageBox.Show("Registro grabado con exito!", "Deposito de productos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        Me.Close()

                    End If

                End If

            Else

                MessageBox.Show("Pedido no encontrado o ya ha sido ingresado.", "Pedidos", MessageBoxButtons.OK, MessageBoxIcon.Information)

            End If

        Catch ex As Exception

            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub CargarDetalles()
        If codMovimiento > 0 Then

            Dim dt As New DataTable
            dt = controller.get_Movimientos_Detalles(oiml.dbConn, codMovimiento)
            If Not dt Is Nothing Then
                dgMovDetalle.DataSource = dt

            End If

        End If

    End Sub

    Private Sub CargarDetalles_Pedido()
        If codNota > 0 Then

            Dim dt As New DataTable
            dt = notas.get_Notas_Detalles_All(oiml.dbConn, codNota, True, True, True)
            If Not dt Is Nothing Then
                dgPedidoDetalle.DataSource = dt

            End If

        End If

    End Sub

    Private Sub CargarNota()
        Try
            If codNota > 0 Then

                Dim ds As New DataTable
                ds = notas.get_Notas_ByID(oiml.dbConn, codNota, oiml.codEstadoCierreNota)

                If Not ds Is Nothing Then

                    ' cargar los controles del formulario con los valores de los campos del registro
                    codNota = ds.Rows(0)("codNota").ToString
                    txtPedidoDatos.Text = "Pedido nro.: " & ds.Rows(0)("nroNota").ToString & " - Fecha: " &
                        ds.Rows(0)("fecha_").ToString() & " - Cliente: " & ds.Rows(0)("nombre").ToString & " - " & ds.Rows(0)("ruc").ToString &
                        " - Estado: " & ds.Rows(0)("descEstadoNota").ToString

                    Me.txtNroPedido.Text = ds.Rows(0)("nroNota").ToString

                    CargarDetalles_Pedido()

                Else
                    codNota = 0
                    txtPedidoDatos.Text = ""
                    dgPedidoDetalle.DataSource = Nothing
                    MessageBox.Show("El pedido seleccionado no ha sido finalizado o no posee productos para su ingreso!", "Deposito de productos", MessageBoxButtons.OK, MessageBoxIcon.Information)

                End If

            Else

                'cargar los controles del formulario con los valores de los campos del registro
                codNota = 0
                txtPedidoDatos.Text = ""
                dgPedidoDetalle.DataSource = Nothing
                MessageBox.Show("El pedido seleccionado no existe o no posee productos para su ingreso!", "Deposito de productos", MessageBoxButtons.OK, MessageBoxIcon.Information)

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub cboDeposito_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles cboDeposito.SelectedValueChanged
        llenarSecciones()
    End Sub

    Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub

    Private Sub txtNroPedido_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles txtNroPedido.KeyDown
        If e.KeyCode = Keys.Enter Then
            btnBuscarPedido_Click(sender, e)
        End If
    End Sub
End Class